define(function(){

    /**
     *  passport 验证 正则
     */
    var validateRegExp = {
        // 空格
        space: /\s/,
        //全空格
        empty: /^\s+$/i,
        //邮件
        email: /^\s*([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,20})\s*$/,
        //身份证
        idcard:  /^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|x|X)?$/,
        // idcard: /^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|x)?$/,
        //密码
        password: /^.*[A-Za-z0-9\\w_-]+.*$/i,
        //数字
        fullNumber: /^[0-9]+$/i,
        //手机
        mobile: /^1([3]\d{1}|[5][0-35-9]|11|47|66|98|99|[8]\d{1}|[7][0135678])\d{8}$|^[0][9]\d{8}$|^[9]\d{8}$/,
        //非中文字
        chinese: /[^\u4e00-\u9fa5]/g,
        //手机验证码
        msgcode: /\d{6}/,
        //6位验证码
        authcode: /[a-zA-Z\d]{6}/,
        // 重复字符
        repeat: /^(.)\1+$/,
        // 全是数字
        isnumber: /^[0-9]+$/i,
        // 全是字母
        isletter: /^[A-Za-z]+$/i,
        // 全是符号
        issign: /^[,.<>{}~!@#$%^&*]+$/i,      
        // 2位以上的汉字
        realname: /^[\u4e00-\u9fa5]{2,}$/i,
        // 3到8位的汉字/字母/数字
        nickname: /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{3,8}$/,
        // 真实姓名只能包括汉字/字母/数字
        idname: /^([\u4e00-\u9fa5]{2,9}|([\u4e00-\u9fa5]{2,9}(·|-|●|\s)[\u4e00-\u9fa5]{2,9}))$/i
    };


    /**
     *  passport 验证方法函数
     */
    var validateRules = {
        len_china: function(str) {
            return str.replace(validateRegExp.chinese, "").length;
        },
        isEmpty: function(str) {
            if (str == "" || typeof str != "string" || validateRegExp.empty.test(str)) {
                return true;
            } else {
                return false;
            }
        },
        isEmail: function(str) {
            return validateRegExp.email.test(str);
        },
        betweenLength: function(str, _min, _max) {
            return str.length >= _min && str.length <= _max;
        },
        isLegalPwd: function(str, _min, _max) {
            if (validateRules.isRepeat(str)) {
                return true;
            } else {
                return validateRules.betweenLength(str, _min, _max);
            }
        },
        isMobile: function(str) {
            return validateRegExp.mobile.test(str);
        },
        isMsgCode: function(str) {
            return validateRegExp.msgcode.test(str);
        },
        isAuthCode: function(str) {
            return validateRegExp.authcode.test(str);
        },
        isRealName: function(str) {
            return validateRegExp.realname.test(str);
        },
        isIdcard: function(str) {
            return validateRegExp.idcard.test(str);
        },
        isIdName: function(str){
            return validateRegExp.idname.test(str);
        },
        isFullNumber: function(str) {
            return validateRegExp.fullNumber.test(str);
        },
        isStrRepeat: function(str1, str2) {
            return str1 == str2;
        },
        isRepeat: function(str) {
            return validateRegExp.repeat.test(str);
        },
        isSpace: function(str) {
            return validateRegExp.space.test(str);
        },
        isIllegalPwd: function(str) {
            return validateRules.isSpace(str);
        },
        isNumber: function(str) {
            return validateRegExp.isnumber.test(str);
        },
        isLetter: function(str) {
            return validateRegExp.isletter.test(str);
        },
        isSign: function(str) {
            return validateRegExp.issign.test(str);
        },
        isUserName: function(str) {
            var strLen = str.length;
            var cnLen = validateRules.len_china(str);
            var fixCnLen = validateRules.len_china(str) * 3;
            if (strLen - cnLen + fixCnLen > 5 && strLen - cnLen + fixCnLen < 25) {
                return true;
            } else {
                return false;
            }
        },
        isNickname: function(str) {
            return validateRegExp.nickname.test(str);
        },
        isAllSame: function(str){
            var first_letter = str.charAt(0),
                i=0,
                len = str.length,
                count=0;

            for( i ;i < len; i++){
                if(str.charAt(i) == first_letter){
                    count++;
                }else{
                    break;
                }
            }
            return count == len;
        }
    };
    
    //公共定义
    var error_tpl = {
        common_empty : '不能为空',
        account_empty : '用户名不能为空',
        password_empty : '密码不能为空',
        account_noexist : '用户名不存在',
        email_format : '安全邮箱格式错误',
        email_notexist : '该邮箱尚未注册',
        email_notyz : '您输入的邮箱还未通过验证，请先使用用户名登录。登录成功后您可以到设置中验证邮箱',
        account_error : '您输入的密码和帐号不匹配，请重新输入',
        unnormal_state : '登录异常，请60分钟后再来登录，或者联系客服',
        unnormal_register_state : '注册异常，注册过于频繁，为了保障您的帐号安全，请在60分钟后再来注册',
        system_error : '系统异常，请稍后重试',
        phone_error : '手机号格式错误',
        nickname_error : '昵称不符合规则',
        nickname_repeat : '亲，该昵称已被别人占用了，换一个吧',
        nickname_length : '用户名格式错误，只支持数字、字母、汉字和下划线，且下划线不能在首末位',
        msgcode_error : '短信验证码错误',
        emailcode_error : '邮箱验证码错误',
        authcode_error : '验证码错误',
        password_length : '新密码格式错误，需8-20位字符',
        password_format : '新密码格式错误，不允许空格，只支持数字、字母和特殊符号',
        password_number_format : '新密码格式错误，不允许使用纯数字，建议设置字母和数字的组合',
        password_letter_format : '新密码格式错误，不允许使用纯字母，建议设置字母和数字的组合',
        password_sign_format : '新密码格式错误，不允许使用纯符号，建议设置字母和数字的组合',
        password_allsame : '新密码格式错误，不允许所有字符重复，建议设置字母和数字的组合',
        password_repeat : '两次输入的密码不匹配'

    };


    return {
        validateRules: validateRules,
        error_tpl : error_tpl
    }

})